package cc.rengu.igas.momp.core.service.trans;

import cc.rengu.igas.momp.common.constant.CommonConstant;
import cc.rengu.igas.momp.common.dao.McMchntInfoMapper;
import cc.rengu.igas.momp.common.dao.PlatBizTmpMapper;
import cc.rengu.igas.momp.common.dao.impl.McMchntInfoMapperImpl;
import cc.rengu.igas.momp.common.dao.impl.PlatBizTmpMapperImpl;
import cc.rengu.igas.momp.common.entity.McMchntFeeDiscountTransData;
import cc.rengu.igas.momp.common.entity.McMchntFeeDiscountTxnData;
import cc.rengu.igas.momp.common.entity.TMMcMchntInfo;
import cc.rengu.igas.momp.common.entity.TMPlatBizTmp;
import cc.rengu.igas.momp.common.enums.*;
import cc.rengu.igas.momp.common.util.JsonOperation;
import cc.rengu.utility.log.RgLogger;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 生成表数据类
 *
 * @author liujinan
 * @version 1.0.0
 * @date 2021/7/16 17:45
 */
public class GenerateTableDataService {

    private String globalTimeStamp = new SimpleDateFormat(CommonConstant.TIMESTAMP_FORMAT).format(new Date());

    /**
     * 生成营销活动商户信息表
     *
     * @param txnData 输入交易实体类
     * @return boolean 是否成功
     * @throws Exception 异常信息
     * @author liujinan
     * @date 2021/7/19 14:55
     */
    public boolean generateTmMcMchntInfoData(Object txnData, RgLogger rglog) throws Exception {

        String instId;
        String mcNo;
        String mchntNo;
        String mchntName;
        String qualifiedDate;

        if (txnData instanceof McMchntFeeDiscountTransData) {
            instId = ((McMchntFeeDiscountTransData) txnData).getInstId();
            mcNo = ((McMchntFeeDiscountTransData) txnData).getMcNo();
            mchntNo = ((McMchntFeeDiscountTransData) txnData).getMchntNo();
            mchntName = ((McMchntFeeDiscountTransData) txnData).getMchntName();
            qualifiedDate = ((McMchntFeeDiscountTransData) txnData).getTransDate();
        } else {
            instId = ((McMchntFeeDiscountTxnData) txnData).getInstId();
            mcNo = ((McMchntFeeDiscountTxnData) txnData).getMcNo();
            mchntNo = ((McMchntFeeDiscountTxnData) txnData).getMchntNo();
            mchntName = ((McMchntFeeDiscountTxnData) txnData).getMchntName();
            qualifiedDate = ((McMchntFeeDiscountTxnData) txnData).getTransDate();
        }

        TMMcMchntInfo tMMcMchntInfo = new TMMcMchntInfo();
        tMMcMchntInfo.setInstId(instId);
        tMMcMchntInfo.setMcNo(mcNo);
        tMMcMchntInfo.setMchntNo(mchntNo);
        //0-商户 1-商圈
        tMMcMchntInfo.setMchntType(CommonConstant.ZERO_COMMON_CONSTANT);
        tMMcMchntInfo.setMchntName(mchntName);
        //0-存量商户 1-新增商户
        tMMcMchntInfo.setNewMchntFlag(CommonConstant.MCHNT_NEW_FLAG);
        //0-未退出优惠 1-已退出优惠
        tMMcMchntInfo.setExitFlag(CommonConstant.MC_NOT_EXIT_FLAG);
        tMMcMchntInfo.setQualifiedDate(qualifiedDate);
        tMMcMchntInfo.setOprId(CommonConstant.DEFAULT_OPR_ID);
        tMMcMchntInfo.setCreateTime(globalTimeStamp);
        tMMcMchntInfo.setLastOprId(CommonConstant.DEFAULT_OPR_ID);
        tMMcMchntInfo.setUpdateTime(globalTimeStamp);

        // 插入营销活动商户信息表数据
        McMchntInfoMapper mcMchntInfoMapper = new McMchntInfoMapperImpl();
        int returnCode = mcMchntInfoMapper.insertTMMcMchntInfo(tMMcMchntInfo);
        if (CommonConstant.PROCESS_SUCCESS != returnCode) {
            rglog.error("将新增商户登记营销活动商户信息表操作失败! RETURN_CODE=<{}>", returnCode);
            return false;
        } else {
            return true;
        }
    }

    /**
     * 登记临时表_营销活动商户信息
     *
     * @param txnData 输入交易实体类
     * @return boolean 是否成功
     * @throws Exception 异常信息
     * @author liujinan
     * @date 2021/7/19 14:55
     */
    public boolean generateTmPlatBizTmpMcMchntInfoData(Object txnData, RgLogger rglog) throws Exception {

        String instId;
        String mcNo;
        String mchntNo;
        String mchntType;
        String mchntName;
        String qualifiedDate;

        if (txnData instanceof McMchntFeeDiscountTransData) {
            instId = ((McMchntFeeDiscountTransData) txnData).getInstId();
            mcNo = ((McMchntFeeDiscountTransData) txnData).getMcNo();
            mchntNo = ((McMchntFeeDiscountTransData) txnData).getMchntNo();
            qualifiedDate = ((McMchntFeeDiscountTransData) txnData).getTransDate();
            mchntType = ((McMchntFeeDiscountTransData) txnData).getMchntType();
            mchntName = ((McMchntFeeDiscountTransData) txnData).getMchntName();
        } else {
            instId = ((McMchntFeeDiscountTxnData) txnData).getInstId();
            mcNo = ((McMchntFeeDiscountTxnData) txnData).getMcNo();
            mchntNo = ((McMchntFeeDiscountTxnData) txnData).getMchntNo();
            qualifiedDate = ((McMchntFeeDiscountTxnData) txnData).getTransDate();
            mchntType = ((McMchntFeeDiscountTxnData) txnData).getMchntType();
            mchntName = ((McMchntFeeDiscountTxnData) txnData).getMchntName();
        }

        TMPlatBizTmp tmPlatBizTmp = new TMPlatBizTmp();
        // 法人机构标识
        tmPlatBizTmp.setInstId(instId);
        // 营销活动编号
        tmPlatBizTmp.setMcNo(mcNo);
        // 商户编号
        tmPlatBizTmp.setMchntNo(mchntNo);
        //商户名称
        tmPlatBizTmp.setMchntName(mchntName);
        // 操作菜单
        tmPlatBizTmp.setOprMenuId(CommonConstant.DEFAULT_MENU_ID);
        // 操作菜单名
        tmPlatBizTmp.setOprMenuName(CommonConstant.DEFAULT_MENU_NAME);
        // 操作表中文名
        tmPlatBizTmp.setOprTableCname(TableNameEnum.T_M_MC_MCHNT_INFO.getTableNameDesc());
        // 操作表英文名
        tmPlatBizTmp.setOprTableEname(TableNameEnum.T_M_MC_MCHNT_INFO.getTableNameCode());
        // 操作 */
        tmPlatBizTmp.setBizOpr(BizOprEnum.INSERT.getBizOprCode());

        TMMcMchntInfo tmMcMchntInfo = new TMMcMchntInfo();
        tmMcMchntInfo.setInstId(instId);
        tmMcMchntInfo.setMcNo(mcNo);
        tmMcMchntInfo.setMchntNo(mchntNo);
        tmMcMchntInfo.setMchntType(mchntType);
        tmMcMchntInfo.setMchntName(mchntName);
        // 新增商户标志
        tmMcMchntInfo.setNewMchntFlag(CommonConstant.MCHNT_NEW_FLAG);
        // 退出标志
        tmMcMchntInfo.setExitFlag(CommonConstant.MC_NOT_EXIT_FLAG);
        // 达标日期
        tmMcMchntInfo.setQualifiedDate(qualifiedDate);
        // 数据域1 - 拼接JSON字符串
        tmPlatBizTmp.setBizData1(JsonOperation.packMcMchntInfoTmpBizData1(tmMcMchntInfo, rglog));
        // 状态
        tmPlatBizTmp.setBizStatus(BizStatusEnum.TMP_STATUS.getBizStatusCode());
        // 营销活动状态
        tmPlatBizTmp.setMcStatus(McStatusEnum.DRAFT.getMcStatusCode());
        // 审批状态
        tmPlatBizTmp.setAuditStatus(AuditStatusEnum.WAIT_FOR_SUBMIT.getAuditStatusCode());
        // 创建人
        tmPlatBizTmp.setOprId(CommonConstant.DEFAULT_OPR_ID);
        // 创建时间
        tmPlatBizTmp.setCreateTime(globalTimeStamp);
        // 使用remark1字段存储商户范围
        tmPlatBizTmp.setRemark1(tmMcMchntInfo.getMchntType());

        // 插入营销活动商户信息表数据
        PlatBizTmpMapper platBizTmpMapper = new PlatBizTmpMapperImpl();
        int returnCode = platBizTmpMapper.insertMcInfoByBank(tmPlatBizTmp);
        if (CommonConstant.PROCESS_SUCCESS != returnCode) {
            rglog.error("将新增商户营销活动商户信息数据登记业务数据临时表操作失败! RETURN_CODE=<{}>", returnCode);
            return false;
        } else {
            return true;
        }
    }
}
